#ifndef KERNEL_H
#define KERNEL_H

/*
 * The kernel class. This entity is a singleton and is instantiate.
 * after the physical memory manager.
 * It's responsible by manager the kernel entities, such as the scheduler, the virtual memory manager, and
 * by handler ALL system calls.
 *
 * 
 */

class Kernel {
	public:
		/* Singleton method. Returns the Kernel instance */
		static Kernel* getInstance(); 
		/* Kernel's methods*/
		void kprintf (const char *format, ...); // kernel's printf
		void panic();
		void start();
		void shutdown();
		
		/* Kernel's syscalls methods */
		
		/* kernel's constants */ 
		/* kernel's messages and others 'string' stuff*/
		static const char* KVERSION;
		static const char* KMSG_BANNER;	
	private:
		/* private to avoid clones */
		Kernel();
		Kernel(const Kernel&) {} // copy constructor
		Kernel& operator=(const Kernel&) { return *this; } // assignment operator
		virtual ~Kernel();
		
		/* private variables */
		static Kernel* instance; // instance holder
		bool isStarted;
		
		/* private methods */
		void convert (char *buffer, int base, int n);
};

#endif
